package com.kevin.design.behavioralPattern.strategyPattern;

/**
 * @Description 策略模式
 * @Author Kevin
 * @Date: Created in  16:22 2019/9/10:
 * @Modified By:
 * @Email: tang.lx@topcheer.com
 */
public class StrategryPatternTest {
    // 3. 引用抽象接口（引用策略）
    private Api api;

    public StrategryPatternTest(Api api) {
        this.api = api;
    }

    public void run(){
        api.run();
    }

    public static void main(String[] args) {
        new StrategryPatternTest(new WindowApi()).run();
        new StrategryPatternTest(new LinuxApi()).run();
    }
}

//1. 创建抽象接口(抽象策略)
interface Api{
    void run();
}
// 2. 实现抽象接口（具体策略）
class WindowApi implements Api{
    @Override
    public void run() {
        System.out.println("windows 运行");
    }
}
class LinuxApi implements Api{
    @Override
    public void run() {
        System.out.println("linux 运行");
    }
}
// 创建策略模式的步骤
// 1. 创建抽象接口(抽象策略)
// 2. 实现抽象接口（具体策略）
// 3. 引用抽象接口（引用策略）
// 应用场景
// 1. 线程 Runnable 就是策略模式的实现，
// Runnable 是抽象策略；
// Thread 是引用策略；
// 我们自己写的类就是抽象策略的具体实现
